package com.it.schoolhomeos.service;

import com.it.schoolhomeos.entity.Student;
import org.springframework.data.domain.Page;
import java.util.List;

/**
 * 学生服务接口
 * 
 * 定义学生相关的业务逻辑操作
 * 包括学生信息的查询、创建、更新和删除等功能
 */
public interface StudentService {
    
    /**
     * 获取学生列表
     * 
     * @param classId 班级ID，可为null
     * @param parentId 家长ID，可为null
     * @param page 页码
     * @param size 每页大小
     * @return 分页的学生列表
     */
    Page<Student> getStudents(Long classId, Long parentId, int page, int size);
    
    /**
     * 获取学生列表（带关键字搜索）
     * 
     * @param classId 班级ID，可为null
     * @param parentId 家长ID，可为null
     * @param keyword 搜索关键词（学生姓名、学号、电话），可为null
     * @param page 页码
     * @param size 每页大小
     * @return 分页的学生列表
     */
    Page<Student> getStudents(Long classId, Long parentId, String keyword, int page, int size);
    
    /**
     * 根据ID获取学生详情
     * 
     * @param id 学生ID
     * @return 学生对象
     * @throws RuntimeException 如果学生不存在
     */
    Student getStudentById(Long id);
    
    /**
     * 创建新学生
     * 
     * @param student 学生对象
     * @return 创建成功的学生对象
     */
    Student createStudent(Student student);
    
    /**
     * 更新学生信息
     * 
     * @param student 学生对象
     * @return 更新后的学生对象
     * @throws RuntimeException 如果学生不存在
     */
    Student updateStudent(Student student);
    
    /**
     * 删除学生
     * 
     * @param id 学生ID
     * @throws RuntimeException 如果学生不存在
     */
    void deleteStudent(Long id);

    List<Student> findAll();
    Student findById(Long id);
    Student save(Student student);
    Student update(Student student);
    void deleteById(Long id);
    List<Student> findByCurrentParent();
    Student findByIdAndCurrentParent(Long id);
    
    /**
     * 获取当前登录教师所教班级的学生列表
     * 
     * @return 学生列表
     */
    List<Student> findByCurrentTeacher();
} 